package bdsimple.impl.mysql;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.ItemDAO;
import bdsimple.dao.base.ItemVentaDAO;
import bdsimple.dao.base.PropiedadVampiroDAO;
import bdsimple.dto.base.ItemDTO;
import bdsimple.dto.base.ItemVentaDTO;
import bdsimple.dto.base.PropiedadVampiroDTO;
import dao.base.impl.BaseDTO;
import dao.base.impl.Reference;

public class ItemVentaDTOImpl extends BaseDTO implements ItemVentaDTO {

	// ---------------------------------------------------------------------------

	public ItemVentaDTOImpl() {
		super(ItemVentaDAO.class);
	}

	private int nivelDesgaste;
	private int nivelReparacion;
	private int cantidad;
	private int precioItemVenta;

	private final Reference<PropiedadVampiroDTO> propiedadVampiroDTORef = //
	new Reference<PropiedadVampiroDTO>();

	private final Reference<ItemDTO> itemDTORef = //
	new Reference<ItemDTO>();

	// ---------------------------------------------------------------------------

	public int getNivelDesgaste() {
		return nivelDesgaste;
	}

	public void setNivelDesgaste(int nivelDesgaste) {
		this.nivelDesgaste = nivelDesgaste;
	}

	// ---------------------------------------------------------------------------

	public int getNivelReparacion() {
		return nivelReparacion;
	}

	public void setNivelReparacion(int nivelReparacion) {
		this.nivelReparacion = nivelReparacion;
	}

	// ---------------------------------------------------------------------------

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	// ---------------------------------------------------------------------------

	public int getPrecioItemVenta() {
		return precioItemVenta;
	}

	public void setPrecioItemVenta(int precioItemVenta) {
		this.precioItemVenta = precioItemVenta;
	}

	// ---------------------------------------------------------------------------

	public Reference<PropiedadVampiroDTO> getPropiedadVampiroDTORef() {
		return propiedadVampiroDTORef;
	}

	public PropiedadVampiroDTO getPropiedadVampiroDTO() {
		if (propiedadVampiroDTORef.getRefValue() == null) {
			if (propiedadVampiroDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					PropiedadVampiroDAO propiedadVampiroDAO = (PropiedadVampiroDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(PropiedadVampiroDAO.class, connectionBean);

					propiedadVampiroDTORef.setRefValue( //
							(PropiedadVampiroDTO) propiedadVampiroDAO
									.loadById(propiedadVampiroDTORef
											.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return propiedadVampiroDTORef.getRefValue();
	}

	public void setPropiedadVampiroDTORef(
			PropiedadVampiroDTO propiedadVampiroDTORef) {
		this.propiedadVampiroDTORef.setRefValue(propiedadVampiroDTORef);
	}

	// ---------------------------------------------------------------------------

	public Reference<ItemDTO> getItemDTORef() {
		return itemDTORef;
	}

	public ItemDTO getItemDTO() {
		if (itemDTORef.getRefValue() == null) {
			if (itemDTORef.getRefIdent() != 0) {
				try {

					// Lazy load the departmentDTORef
					ItemDAO itemDAO = (ItemDAO) AbstractFactoryDAO
							.getFactoryDAO(). //
							getDAO(ItemDAO.class, connectionBean);

					itemDTORef.setRefValue( //
							(ItemDTO) itemDAO
									.loadById(itemDTORef.getRefIdent()));

				} catch (Exception e) {
					e.printStackTrace();
					throw new RuntimeException(e);
				}
			}
		}

		return itemDTORef.getRefValue();
	}

	public void setItemDTORef(ItemDTO itemDTORef) {
		this.itemDTORef.setRefValue(itemDTORef);
	}

	// ---------------------------------------------------------------------------

}
